package basic.JunitTest;
import javax.management.RuntimeErrorException;

import org.junit.Test;//jar在本例的根目录下
//编译：
    //在目录【E:\桌面\JAVA面试\Java语法与工具学习\基础语法\Junit单元测试>】,即此目录为项目根目录，此项目下的所有文件夹就是我们所认为的“包名”
    //专业名称：源码根目录（Source Root）或 源目录（Source Directory），特点：
    //所有 .java 源文件都放在这个目录或其子目录下。
    //包（package）的结构 = 从源码根目录开始的子目录结构。

//javac -source 1.8 -target 1.8 -encoding UTF-8 -cp ".;junit-4.13.2.jar;hamcrest-core-1.3.jar" basic\JunitTest\TestClass.java
    //-encoding UTF-8 是因为代码中有中文，没有中文就可以不加
    //-source 1.8 -target 1.8指定使用的jdk版本，是因为我的电脑有多个jdk，配置有些混乱，如果不加，运行时使用java命令会报错：Exception in thread "main" java.lang.UnsupportedClassVersionError: basic/JunitTest/TestClass has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    //如果电脑没有这个报错，可不加
    //-cp 参数把两个 JAR 都加进去。注意Windows 下 classpath 分隔符是 分号 ;Linux/macOS 下是 冒号 :
    //basic\JunitTest\TestClass.java,前面的basic\JunitTest\既是路径，也是包名


//运行：
    //在目录【E:\桌面\JAVA面试\Java语法与工具学习\基础语法\Junit单元测试>】
//java -cp ".;junit-4.13.2.jar;hamcrest-core-1.3.jar" org.junit.runner.JUnitCore basic.JunitTest.TestClass
    //命令结构：java [选项] -cp <类路径> <主类全限定名> [参数]    
    //-cp：指定 类路径（Classpath），缩写cp
        //".;junit-4.13.2.jar;hamcrest-core-1.3.jar"：类路径的值
        //.(当前目录),表示“当前工作目录”作为类路径的一部分,JVM 会从当前目录（即 E:\桌面\...\Junit单元测试\）查找 .class 文件(如TestClass.class)。
        //;：分隔符。注意Windows 下 classpath 分隔符是 分号 ;Linux/macOS 下是 冒号 :
        //junit-4.13.2.jar：这是一个 JAR 文件，包含了 JUnit 4 的核心类。
            /*
            /根目录/
            junit-4.13.2.jar
            └── org/
                └── junit/
                    ├── runner/
                    │   └── JUnitCore.class   ← 我们要运行的主类
                    ├── Test.class            ← @Test 注解
                    └── ...
            */
        //hamcrest-core-1.3.jar：JUnit 4 依赖 Hamcrest 断言库，这个 JAR 提供了核心匹配器（Matcher）功能。
        /*
        /根目录/
         hamcrest-core-1.3.jar
        └── org/
            └── hamcrest/
                ├── CoreMatchers.class
                └── SelfDescribing.class  ← JUnit 内部依赖
    
        */
    //org.junit.runner.JUnitCore：要运行的主类（包含 main 方法）
    //[参数]:此处为：测试类的全路径basic.JunitTest.TestClass
    /*
     JUnitCore 执行逻辑：
        接收到参数：basic.JunitTest.TestClass
        根据全路径，通过反射获取该类的class对象、反射扫描 @Test 方法、发现 testMethod1() 上有 @Test 注解、调用该方法
        输出结果：显示测试通过或失败 
    */
public class TestClass {
    @Test
    public void testMethod1(){//必须是公开的public方法，无参，无返回值
        System.out.println("test");
    }
     @Test
    public void testMethod2(){//必须是公开的public方法，无参，无返回值
        throw new RuntimeErrorException(null);
    }
    
}
